package com.sojson.util.swagger.test.controller;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;

import com.sojson.result.Result;
import com.sojson.util.swagger.test.entity.SwaggerTestBean;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

/**
 * tags: Yapi上的接口分类名
 */
@Api(tags = "Swagger注解测试", value = "注解测试")
/**
 * Swagger2接口列表地址                        (接口路径+/swagger-ui.html)</BR>
 * Yapi导入Swagger2接口列表的地址   (接口路径+/v2/api-docs)</BR>
 */
// @RestController
// @RequestMapping("/swaggerTest")
public class SwaggerTestController {

    @PostMapping("/test")
    @PreAuthorize("@ss.hasPermi('/swaggerTest/test')")
    /**
     * value:       接口说明
     * notes:       接口详细说明
     * httpMethod:  请求方式
     * response:    返回参数类型
     */
    @ApiOperation(value = "添加广告", notes = "根据广告对象添加广告", response = SwaggerTestBean.class)
    /**
     * @ApiImplicitParams和@ApiImplicitParam可以一起用
     * 如果方法上的参数是基本类型,则这个属性名的属性默认会加到接口中,注解会覆盖重写这个属性
     * 如果方法上的参数是引用类型,则这个引用类型所有带注解的属性都会加到接口中
     * 如果注解设置的属性不存在就需要指定类型,否则一些数据为空
     * 如果注解设置的属性名和对象的属性名一样,则对象里的属性和注解设置的属性都会加到接口中
     * name:            参数名
     * value:           参数说明
     * required:        是否必传
     * defaultValue:    默认值
     * example:         例子
     * allowMultiple:   是否是数组格式的参数,如果为数组格式,dataType为数组中参数的类型
     * dataType:        参数类型{@link springfox.documentation.schema.Types}
     *                          (
     *                          基本类型按照正常来赋值,基本类型只能是{@link springfox.documentation.schema.Types},
     *                          引用类型需要加包名,只要是开头大写都是引用类型,@link springfox.documentation.schema.Types}除外,
     *                          自定义泛型类应该按照如下格式来赋值:dataType = "类名«类名«类名»»"，重点是符号“«»”
     *                          )
     * paramType:       参数放在哪个地方(
     *                              form:   from表单提交 仅支持POST            --> 获取方式:@RequestParam
     *                              query:  直接跟参数完成自动映射赋值                             --> 获取方式:@RequestParam
     *                              body:   以流的形式提交 仅支持POST            --> 获取方式:@RequestBody
     *                              path:   以地址的形式提交数据(用于restful接口) --> 获取方式:@PathVariable
     *                              header: 参数在request headers里边提交              --> 获取方式:@RequestHeader
     *                              )
     */
    @ApiImplicitParam(name = "test1", value = "参数说明1(必传,默认值1,string类型,form提交)", required = true, defaultValue = "1",
        example = "100", dataType = "string", paramType = "form")
    @ApiImplicitParams({
        //
        @ApiImplicitParam(name = "test2", value = "参数说明2(必传,默认值1,java.lang.String类型,form提交)", required = true,
            defaultValue = "1", example = "100", dataType = "java.lang.String", paramType = "query"),
        //
        @ApiImplicitParam(name = "test3", value = "参数说明3(非必传,默认值1,int类型,form提交)", required = false, defaultValue = "1",
            example = "100", dataType = "int", paramType = "body"),
        //
        @ApiImplicitParam(name = "test4", value = "参数说明4(非必传,默认值1,java.lang.Integer类型,form提交)", required = false,
            defaultValue = "1", example = "100", dataType = "java.lang.Integer", paramType = "path"),
        //
        @ApiImplicitParam(name = "test5", value = "参数说明5(非必传,默认值1,com.sojson.entity.po.Menu类型,form提交)",
            required = false, defaultValue = "1", example = "100", dataType = "com.sojson.entity.po.Menu",
            paramType = "header")
        //
    })
    public Object test(SwaggerTestBean swaggerTestBean) {
        return Result.success();
    }

}